package orxatas.travelme.manager;

import java.util.ArrayList;

import orxatas.travelme.activity.AsyncActivity;
import orxatas.travelme.sync.AsyncNoticeCode;
import orxatas.travelme.sync.SyncData;
import orxatas.travelme.sync.SyncData.SyncDataType;

public class DataManager {
	
	private static ArrayList<AsyncActivity> asyncActivityL = null;
	private SyncData sd;
	
	public DataManager(AsyncActivity asyncActivity){
		if(asyncActivityL == null) asyncActivityL = new ArrayList<AsyncActivity>();
		
		boolean was = false;
		for(AsyncActivity aa: asyncActivityL){
			if(aa == asyncActivity) //Same pointer.
				was = true;
		}
		if(!was) asyncActivityL.add(asyncActivity);
		
		sd = new SyncData(this, asyncActivity);
	}
	
	public void activityEnds(AsyncActivity acEnd){
		ArrayList<AsyncActivity> newL = new ArrayList<AsyncActivity>();
		for(AsyncActivity aa: asyncActivityL){
			if(acEnd != aa)
				newL.add(aa);
		}
		
		asyncActivityL = newL;
	}
	
	public void syncThis(SyncDataType syncThis){
		sd.syncThis(syncThis);
	}
	
	public void syncAll(){
		sd.syncAll();
	}
	
	public boolean isSync(){
		return sd.isSync();
	}
	
	private void clean(){
		ArrayList<AsyncActivity> newL = new ArrayList<AsyncActivity>();
		for(AsyncActivity aa: asyncActivityL){
			if(!aa.getActivity().isFinishing())
				newL.add(aa);
		}
		
		asyncActivityL = newL;
	}
	
	/**
	 * Se le avisa de que hay una sincronización en curso. Convenio: Sólo utilizar cuando por su clase de sincronización.
	 * */
	public void syncInProgress(){
		clean();
		for(AsyncActivity aa: asyncActivityL){
			aa.syncStarted();
		}
	}
	
	/**
	 * Se le avisa de que la sincronización en curso ha terminado. Convenio: Sólo utilizar cuando por su clase de sincronización.
	 * */
	public void syncInProgressEnd(){
		clean();
		sd.syncEnd();
		for(AsyncActivity aa: asyncActivityL){
			aa.syncEnded();
		}
	}
	/**
	 * Evento asyncrono para cambios en los grupos.
	 * */
	public void asyncNotice(AsyncNoticeCode code){
		clean();
		for(AsyncActivity aa: asyncActivityL){
			aa.asyncNotice(code);
		}
	}
}
